/**
  ******************************************************************************
  * @file    ssl-util.h
  * @author  Dragon.Chen
  * @version V1.0.0
  * @date    01-15-2014
  * @brief   SSL操作相关函数(USBKEY)
  ******************************************************************************
  *
  * <h2><center>&copy; COPYRIGHT 2013 上海今中网络科技有限公司 </center></h2>
  ******************************************************************************
  */

#include "ssl-util.h"

//const char *GetLastSslErrorString(SSL *ssl, int ret)
//{
//    switch(SSL_get_error(ssl, ret))
//    {
//        case SSL_ERROR_NONE :
//            return "SSL_ERROR_NONE\n";
//        case SSL_ERROR_ZERO_RETURN:
//            return "SSL_ERROR_ZERO_RETURN\n";
//        case SSL_ERROR_WANT_READ:
//            return "SSL_ERROR_WANT_READ\n";
//        case SSL_ERROR_WANT_WRITE:
//            return "SSL_ERROR_WANT_WRITE\n";
//        case SSL_ERROR_WANT_CONNECT :
//            return "SSL_ERROR_WANT_CONNECT\n";
//        case SSL_ERROR_WANT_ACCEPT :
//            return "SSL_ERROR_WANT_ACCEPT\n";
//        default : return "unknow error\n";
//    }
//}

/**
  * @brief  服务器ssl初始化
  * @param  arg1 server_info
  * @retval 成功为TRUE，否则FALSE
  */
//BOOL ssl_server_init(SERVER_INFO *server_info)
//{
//    SSL_library_init();
//	SSL_load_error_strings();
//	SSLeay_add_ssl_algorithms();
//	ERR_load_crypto_strings();
//
//	/********* 初始化SSL_CTX结构，并设置SSL协议算法 */
//	if ( (server_info->ssl_ctx = SSL_CTX_new(SSLv23_server_method())) == NULL)
//	{
//		GetLastSslErrorMessage(LOG_ERROR, "[ssl_server_init:SSL_CTX_new]");
//		return FALSE;
//	}
//
//	/********* 设置服务器证书 */
//	if (SSL_CTX_use_certificate_file(server_info->ssl_ctx, server_info->cfi->server_cert, SSL_FILETYPE_PEM) <= 0)
//	{
//		GetLastSslErrorMessage(LOG_ERROR, "[ssl_server_init:SSL_CTX_use_certificate_file]");
//		goto cleanup;
//	}
//
//	/********* 设置服务器私钥 */
//	if (SSL_CTX_use_PrivateKey_file(server_info->ssl_ctx, server_info->cfi->server_key, SSL_FILETYPE_PEM) <= 0)
//	{
//		GetLastSslErrorMessage(LOG_ERROR, "[ssl_server_init:SSL_CTX_use_PrivateKey_file]");
//		goto cleanup;
//	}
//
//	/********* 检查私钥和证书是否匹配 */
//	if (!SSL_CTX_check_private_key(server_info->ssl_ctx))
//	{
//		GetLastSslErrorMessage(LOG_ERROR, "[ssl_server_init:SSL_CTX_check_private_key]");
//		goto cleanup;
//	}
//
////    /********* 加载CA证书 */
////	if (SSL_CTX_load_verify_locations(server_info->ssl_ctx, server_info->cfi->ca_cert, NULL) != 1)
////	{
////		GetLastSslErrorMessage(LOG_ERROR, "[ssl_client_init:SSL_CTX_load_verify_locations]");
////		goto cleanup;
////	}
//
////	/********* 验证服务器 */
////	SSL_CTX_set_verify(server_info->ssl_ctx, SSL_VERIFY_PEER, NULL);
////	SSL_CTX_set_verify_depth(server_info->ssl_ctx, 1);
//
//	return TRUE;
//
//cleanup:
//    SSL_CTX_free(server_info->ssl_ctx);
//    server_info->ssl_ctx = NULL;
//    return FALSE;
//}

/**
  * @brief  服务器接受链接ssl
  * @param  arg1:client_info  arg2:ssl_ctx
  * @retval 成功返回SSL，否则返回NULL
  */
//SSL *ssl_server_negotiate(CLIENT_INFO *client_info, SSL_CTX *ssl_ctx, int cltfd)
//{
//    int ret;
//
//	/********* 新建SSL结构变量 */
//	if ( (client_info->ssl = SSL_new(ssl_ctx)) == NULL)
//	{
//		GetLastSslErrorMessage(LOG_ERROR, "[ssl_server_negotiate:SSL_new]");
//		return NULL;
//	}
//
//	/********* 为SSL结构体设置socket连接句柄 */
//    if (SSL_set_fd(client_info->ssl, cltfd) != 1)
//    {
//        GetLastSslErrorMessage(LOG_ERROR, "[ssl_server_negotiate:SSL_set_fd]");
//		goto cleanup;
//    }
//
//	/********* 接受SSL链接 */
//	if ( (ret = SSL_accept(client_info->ssl)) != 1)
//	{
//		LOG("INFO: %s", GetLastSslErrorString(client_info->ssl, ret));
//		if ( SSL_shutdown(client_info->ssl) != 1)
//			LOG("INFO: %s", GetLastSslErrorString(client_info->ssl, ret));
//		goto cleanup;
//	}
//
//	return client_info->ssl;
//
//cleanup:
//    SSL_free(client_info->ssl);
//    client_info->ssl = NULL;
//    return NULL;
//}

/**
  * @brief  服务器释放占用资源
  * @param  arg1:client_info
  * @retval NULL
  */
//void server_release_resource(CLIENT_INFO *client_info)
//{
//    SSL_shutdown(client_info->ssl);
//    SSL_free(client_info->ssl);
//    client_info->ssl = NULL;
//    closesocket(client_info->w->fd);
//}

/******************* (C) COPYRIGHT 2013 上海今中网络科技有限公司 *****END OF FILE****/















